public class MinimumSizeSubarraySum {
    // 规则: 窗口内元素之和大于等于 target
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length;
        int left = 0, right = 0;
        int sum = 0; //记录窗口内元素之和
        int len = 10_0001; //记录窗口内元素的个数(窗口大小)
        while(right < n) {
            sum += nums[right];
            right++;
            while(sum >= target) {
                // 窗口元素之和满足题目条件, 更新结果
                len = Math.min(len, right - left);
                // 更新之后, 需要收缩窗口(因为right指针再扩大窗口, 一直都会大于 target)
                // 因此需要收缩窗口, 以容纳新的元素进来满足题目要求
                sum -= nums[left];
                left++;
            }
        }
        // 如果 len 没有发生变化, 说明整个数组加起来都无法满足题目要求, 不存在符合条件的子数组
        // 根据题目要求返回0
        return len == 10_0001 ? 0 : len;
    }
}
